package com.dl.mall.service.user.impl;

import com.dl.mall.entity.Page;
import com.dl.mall.entity.Product;
import com.dl.mall.entity.ProductSpecs;
import com.dl.mall.entity.user.OrderInfo;
import com.dl.mall.info.BrandInfo;
import com.dl.mall.mapper.ProductMapper;
import com.dl.mall.service.user.ProductService;
import com.dl.mall.utils.PageUtils;
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.*;

/**
 * @author DL
 * @create 2022-03-23 15:47
 */
@Service
@Transactional
public class ProductServiceImpl implements ProductService {

    @Resource
    ProductMapper productMapper;

    /**
     * 用户购物，根据 订单 扣除库存
     * @param orderInfoList 订单商品信息
     * @return 结果
     */
    @Override
    public int deductSpecsStock(List<OrderInfo> orderInfoList) {
        return productMapper.deductSpecsStock(orderInfoList);
    }

    /**
     * 订单取消，根据 订单 恢复库存
     * @param orderInfoList 订单商品信息
     * @return 结果
     */
    @Override
    public int recoverySpecsStock (List<OrderInfo> orderInfoList) {
        return productMapper.recoverySpecsStock(orderInfoList);
    }

    /**
     * 根据 产品id 查询产品
     * @param productId 产品id
     * @return 产品
     */
    @Override
    public Product getProductById(String productId) {
        return productMapper.queryProductById(productId);
    }

    /**
     * 根据 产品id + 配置 搜索sku
     * @param productId 产品id
     * @param productSpecs 产品规格
     * @return 产品
     */
    @Override
    public ProductSpecs getProductBySpecs(String productId, String productSpecs) {
        return productMapper.queryProductBySpecs(productId, productSpecs);
    }

    /**
     * 根据 品牌id 查询某品牌产品（枚举）
     * @param brandId 品牌id
     * @return 分页结果
     */
    @Override
    public Page<Product> getProductByBrandId(BrandInfo brandId, int currentPage, int pageSize) {
        PageHelper.startPage(currentPage, pageSize);

        List<Product> list = productMapper.queryProductByBrandId(brandId.getValue());

        return (Page<Product>) PageUtils.getPage(list);
    }

    /**
     * 根据 品牌id 查询某品牌产品
     * @param brandId 品牌id
     * @return 分页结果
     */
    @Override
    public Page<Product> getProductByBrandId(int brandId, int currentPage, int pageSize) {
        PageHelper.startPage(currentPage, pageSize);
        List<Product> list = productMapper.queryProductByBrandId(brandId);

        return (Page<Product>) PageUtils.getPage(list);
    }

    /**
     * 所有产品普通分页
     * @param currentPage 当前页
     * @param pageSize 页面大小
     * @return 分页结果
     */
    @Override
    public Page<Product> getProductPage(int currentPage, int pageSize) {
        PageHelper.startPage(currentPage, pageSize);// 开启分页

        List<Product> list = productMapper.queryProduct();// 数据本身

        return (Page<Product>) PageUtils.getPage(list);// 返回自定义工具类
    }

    /**
     * 根据 关键字 查询产品
     * @return 产品集合
     */
    @Override
    public Page<Product> getProductByKeyWord(String keyWord, int currentPage, int pageSize) {
        PageHelper.startPage(currentPage, pageSize);
        List<Product> list = productMapper.queryProductByKeyWord(keyWord);
        return (Page<Product>) PageUtils.getPage(list);
    }

    /**
     * 随机查询手机
     * @param maximum 最大查询
     * @return 手机信息
     */
    @Override
    public List<Product> getPhoneByRandom(Integer maximum) {
        return productMapper.queryPhone(maximum);
    }

    /**
     * 随机查询电脑
     * @param maximum 最大查询
     * @return 电脑信息
     */
    @Override
    public List<Product> getComputerByRandom(Integer maximum) {
        return productMapper.queryComputer(maximum);
    }

    /**
     * 随机查询智能设备
     * @param maximum 最大查询
     * @return 智能设备
     */
    @Override
    public List<Product> getIntelligentByRandom(Integer maximum) {
        return productMapper.queryIntelligent(maximum);
    }

    /**
     * 随机查询配件
     * @param maximum 最大查询
     * @return 配件
     */
    @Override
    public List<Product> getAccessoryByRandom(Integer maximum) {
        return productMapper.queryAccessory(maximum);
    }

    @Override
    public ProductSpecs getProductSpecsBySpecsId(String specsId) {
        return productMapper.queryProductSpecsBySpecsId(specsId);
    }

    @Override
    public boolean deductSpecsStockSeckill(String specsId, Integer total) {
        return productMapper.deductSpecsStockSeckill(specsId, total) != 0;
    }


}
